#pragma once

#include "ICollideAble.h"

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <Summary>	LineSegment  </Summary>
/// 
/// <purpose>	Collidable class that defines segmented part of a line </purpose>
////////////////////////////////////////////////////////////////////////////////////////////////////

class LineSegment : public ICollideAble
{
public:

	/// <Summary> The start point of this segment </Summary>
	Vector3 start;

	/// <Summary> The end point of this segment </Summary>
	Vector3 end;

public:

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Default constructor. </Summary>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	LineSegment() { }

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Virtual Destructor </Summary>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ~LineSegment() { }

public:

	/// <Summary> The collision type of this object </Summary>
	static const HashString COLLISIONTYPE;

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Gets the collision type </Summary>
	///
	/// <Return>	The collision type </Return>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual const HashString& GetCollisionType() const { return COLLISIONTYPE; }

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Transforms this object by a matrix </Summary>
	///
	/// <Param name="transform">	The transform matrix	</Param>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void Transform(const Matrix4x4& transform);

protected:

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Prints this object to the console </Summary>
	///
	/// <Param name="out">	The console window </Param>
	///
	/// <Return>	The console window </Return>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ConsoleWindow& Print(ConsoleWindow& out) const;
};